package com.gpnu7_412.yanzhi.service;

import com.github.pagehelper.PageInfo;
import com.gpnu7_412.yanzhi.dto.ConciseUserDto;
import com.gpnu7_412.yanzhi.dto.DataStatisticsDto;
import com.gpnu7_412.yanzhi.dto.DynamicDisplayDto;
import com.gpnu7_412.yanzhi.entity.Dynamic;
import com.gpnu7_412.yanzhi.entity.DynamicHanding;
import com.gpnu7_412.yanzhi.entity.User;

import java.sql.Timestamp;
import java.time.LocalDateTime;
import java.util.List;

/**
 * @author ZZH
 */
public interface DynamicService {

    /**
     * 发布动态
     * @param dynamic 动态信息
     * @return boolean
     */
    boolean releaseDynamic(Dynamic dynamic);

    /**
     * 删除动态
     * @param dynamicId 待删动态ID
     * @param userId 操作用户ID
     * @return boolean
     */
    boolean deleteDynamic(Integer dynamicId, Integer userId);

    /**
     * 修改动态信息
     * @param dynamic 修改后的动态对象
     * @param userId 操作用户ID
     * @return boolean
     */
    boolean updateDynamic(Dynamic dynamic, Integer userId);

    /**
     * 动态点赞
     * @param dynamicId 动态ID
     * @return boolean
     */
    boolean likeDynamic(Integer dynamicId);

    /**
     * 动态举报
     * @param dynamicHanding 动态举报信息
     * @return boolean
     */
    boolean reportDynamic(DynamicHanding dynamicHanding);

    /**
     * 根据动态ID查找动态展示DTO
     * @param dynamicId 动态ID
     * @return 动态展示DTO
     */
    DynamicDisplayDto getDynamicById(Integer dynamicId);

    /**
     * 查看所有动态
     * @return 动态展示DTO
     */
    PageInfo<DynamicDisplayDto> getAllDynamic(Integer pageNum, Integer pageSize);

    /**
     * 查看所有关注者动态
     * @param userId 用户ID
     * @return 动态展示DTO
     */
    PageInfo<DynamicDisplayDto> getAllAttention(Integer pageNum, Integer pageSize, Integer userId);

    /**
     * 根据标题模糊查找动态
     * @param title 标题
     * @return 动态展示DTO
     */
    List<DynamicDisplayDto> getDynamicByTitle(String title);

    /**
     * 根据用户ID获取该用户发布的动态
     * @param userId 用户ID
     * @return 动态列表
     */
    List<Dynamic> getDynamicByUserId(Integer userId);

    /**
     * 根据条件分页查询动态
     * @param pageNum 查询页
     * @param pageSize 页面大小
     * @param dynamic 动态信息
     * @return 动态展示DTO
     */
    PageInfo<DynamicDisplayDto> getDynamicsByCondition(Integer pageNum, Integer pageSize, Dynamic dynamic);

    List<DataStatisticsDto> getQuantityStatistics(LocalDateTime startDate, LocalDateTime endDate);
}
